package cn.iocoder.yudao.module.bill.controller.admin.bill.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.math.BigDecimal;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;

@Schema(description = "管理后台 - 账单信息 Response VO")
@Data
@ExcelIgnoreUnannotated
public class BillRespVO {

    @Schema(description = "唯一ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1156")
    @ExcelProperty("唯一ID")
    private Long id;

    @Schema(description = "账单标题")
    @ExcelProperty("账单标题")
    private String billTitle;

    @Schema(description = "账单备注", example = "随便")
    @ExcelProperty("账单备注")
    private String billRemark;

    @Schema(description = "账单金额")
    @ExcelProperty("账单金额")
    private BigDecimal billAmount;

    @Schema(description = "收支类型", example = "2")
    @ExcelProperty(value = "收支类型", converter = DictConvert.class)
    @DictFormat("bill_amount_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private String amountType;

    @Schema(description = "变动账户", example = "5933")
    @ExcelProperty("变动账户")
    private Long accountId;

    @Schema(description = "一级分类")
    @ExcelProperty("一级分类")
    private String cate1;

    @Schema(description = "二级分类")
    @ExcelProperty("二级分类")
    private String cate2;

    @Schema(description = "三级分类")
    @ExcelProperty("三级分类")
    private String cate3;

    @Schema(description = "账单标签")
    @ExcelProperty("账单标签")
    private String tags;

    @Schema(description = "账单所属模板", example = "6614")
    @ExcelProperty("账单所属模板")
    private String templateId;

    @Schema(description = "账单类型", example = "2")
    @ExcelProperty(value = "账单类型", converter = DictConvert.class)
    @DictFormat("bill_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private String billType;

    @Schema(description = "账单阶段")
    @ExcelProperty(value = "账单阶段", converter = DictConvert.class)
    @DictFormat("bill_stage") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private String billStage;

    @Schema(description = "账单状态", example = "1")
    @ExcelProperty(value = "账单状态", converter = DictConvert.class)
    @DictFormat("bill_status") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private String billStatus;

    @Schema(description = "转账去向", example = "27884")
    @ExcelProperty("转账去向")
    private Long transAccountId;

    @Schema(description = "账单时间")
    @ExcelProperty("账单时间")
    private LocalDateTime billTime;

    @Schema(description = "外部说明", example = "随便")
    @ExcelProperty("外部说明")
    private String extRemark;

    @Schema(description = "外部付款账户", example = "2372")
    @ExcelProperty("外部付款账户")
    private String extFromAccount;

    @Schema(description = "外部付款人")
    @ExcelProperty("外部付款人")
    private String extFromOwner;

    @Schema(description = "外部收款账户", example = "29717")
    @ExcelProperty("外部收款账户")
    private String extToAccount;

    @Schema(description = "外部收款人")
    @ExcelProperty("外部收款人")
    private String extToOwner;

    @Schema(description = "补充信息")
    @ExcelProperty("补充信息")
    private String extInfo;

    @Schema(description = "账单来源")
    @ExcelProperty("账单来源")
    private String extBillSource;

    @Schema(description = "外部参数")
    @ExcelProperty("外部参数")
    private String extParam;

    @Schema(description = "排序号")
    @ExcelProperty("排序号")
    private Integer orderNum;

    @Schema(description = "是否为资产")
    @ExcelProperty(value = "是否为资产", converter = DictConvert.class)
    @DictFormat("bill_yes_or_no") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer hasProperty;

    @Schema(description = "资产名称", example = "芋艿")
    @ExcelProperty("资产名称")
    private String propertyName;

    @Schema(description = "资产盘点时间")
    @ExcelProperty("资产盘点时间")
    private LocalDateTime propertyCheckTime;

    @Schema(description = "资产类别")
    @ExcelProperty(value = "资产类别", converter = DictConvert.class)
    @DictFormat("property_cate") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private String propertyCate;

    @Schema(description = "资产价值")
    @ExcelProperty("资产价值")
    private BigDecimal propertyValue;

    @Schema(description = "资产参数")
    @ExcelProperty("资产参数")
    private String propertyParam;

    @Schema(description = "资产备注", example = "你猜")
    @ExcelProperty("资产备注")
    private String propertyRemark;

    @Schema(description = "资产状态", example = "1")
    @ExcelProperty(value = "资产状态", converter = DictConvert.class)
    @DictFormat("property_status") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private String propertyStatus;

    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("创建时间")
    private LocalDateTime createTime;

}